package com.tmindtech.api.justice.service

import com.tmindtech.api.dept.db.DeptMapper
import com.tmindtech.api.dept.model.Department
import com.tmindtech.api.enterprise.db.EnterpriseMapper
import com.tmindtech.api.enterprise.model.Enterprise
import com.tmindtech.api.justice.db.JusticeCaseMapper
import com.tmindtech.api.justice.db.JusticeStaffMapper
import com.tmindtech.api.justice.model.JusticeCase
import com.tmindtech.api.justice.model.JusticeStaff
import com.tmindtech.api.justice.model.StaffType
import com.tmindtech.api.utils.importCsv
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.stereotype.Component
import org.springframework.transaction.annotation.Transactional
import java.io.InputStream
import java.text.SimpleDateFormat

/**
 * Created by RexQian on 2017/11/22.
 */
@Component
class JusticeCsvImport {
    @Autowired
    lateinit var deptMapper: DeptMapper
    @Autowired
    lateinit var staffMapper: JusticeStaffMapper
    @Autowired
    lateinit var caseMapper: JusticeCaseMapper
    @Autowired
    lateinit var enterpriseMapper: EnterpriseMapper

    @Transactional
    fun importStaffCsv(inputStream: InputStream) {
        importCsv(inputStream) { line ->
            val item = line2Staff(line) ?: return@importCsv false
            staffMapper.insertSelective(item)
            return@importCsv true
        }
    }

    private fun line2Staff(line: Array<String>): JusticeStaff? {
        val item = JusticeStaff()
        val dept = deptMapper.selectOne(Department(name = line[0].trim())) ?: return null
        item.deptId = dept.id
        item.name = line[1].trim().replace(" ", "")
        item.phone = line[2].trim()
        item.type = StaffType.Justice.value
        return item
    }

    @Transactional
    fun importCaseCsv(inputStream: InputStream) {
        importCsv(inputStream) { line ->
            val item = line2Case(line) ?: return@importCsv false
            caseMapper.insertSelective(item)
            return@importCsv true
        }
    }

    /**
     * 序号	案件名称	处罚决定书文号	案件状态	立案时间	处罚时间	罚没款数(元)	办案机构	经办人	案件性质
     * 1	郑兴金无照加工绣花工艺品	仙工商城东处字〔2007〕第013号	结束	2007年1月4日	2007年3月10日	3500	仙居福应所	周焕龙
     */
    private fun line2Case(line: Array<String>): JusticeCase? {
        val item = JusticeCase()
        item.enterpriseId = enterpriseMapper.selectOne(Enterprise(regCode = line[12].trim()))?.id ?: return null
        item.name = line[1].trim()
        item.caseCode = line[2].trim()
        item.status = line[3].trim()
        val dateFormat = SimpleDateFormat("yyyy年MM月dd")
        item.caseDate = dateFormat.parse(line[4].trim())
        item.judgeDate = if (line[5].isNotBlank()) dateFormat.parse(line[5].trim()) else null
        item.fine = line[6].trim().toDoubleOrNull()?.times(100)?.toInt() ?: 0
        item.deptName = line[7].trim()
        item.staffs = if (line[8].isNotBlank()) line[8].trim().split(",") else null
        item.caseType = line[9].trim()
        return item
    }
}